Especially in enterprise and datacenter applications, one of the key parameters of Solid State Drives (SSDs) is Quality of Service (QoS). QoS is the overall performance of a telephony or computer network, particularly the performance seen by the users of the network. To quantitatively measure quality of service, several related aspects of the network service are often considered, such, without limitation, as error rates, bit rate, throughput, transmission delay, availability and jitter.
An SSD includes a flash controller and NAND flash memories organized in “flash channels.” SSDs are managed by hosts (i.e. CPU, PC, server, or OS, without limitation) and communication between the host and the SSD is based on read and write transactions. When the host sends a request, a timer is started in the host computer and the time that the SSD takes to service the request falls under the QoS umbrella of the network. For the host computer, there are two types of requests, read and write. A host read request is translated by the flash controller into the correct NAND physical address. The NAND performs the read operation and returns the page content to the flash controller that sends the read data to the host.
For a write request, the flash controller decides where to physically store the host's data inside the pool of available NAND memories, and then programs the host's data into the selected NAND memory. Because the NAND programming operation takes milliseconds, data to be written are cached inside a DRAM bank so that the time to service the host's request can be reduced. The biggest problem for QoS in the SSD context is read latency because it can't be masked by a simple caching technique.
One way to solve this problem is to suspend an ongoing programming or erase operation and resume the suspended operation at a later point in time.
Accordingly, there is a need for suspending both erase and program operations. Though some commercial NAND flash memories allow for erase suspend (e.g., using an Erase Suspend command), program suspend functionality has not been embedded in commercial NAND flash memories. The method and apparatus of the present invention allow for implementing a program suspend using commercially available NAND flash memories.